/**
 第三方库
 jdom 类似dom也是节点模式 但是放弃接口 不封装 直接使用具体类 和大量使用Collections工具类
 创建步骤不需要先创建工厂对象
 直接创建解析器开始

 下载网址：
 */

package 第十七章_XML与JSON.XML_JDOM;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Jdom_run {
    @Test
    public void jdom_parseXML() throws IOException, JDOMException {
        //1.直接创建解析器对象
        SAXBuilder builder=new SAXBuilder();
        //2.读取流
        InputStream is = Thread.currentThread().getContextClassLoader()
                .getResourceAsStream("第十七章_XML与JSON/XML_JDOM/People.xml");
        //3.使用的是jdom 的Document类   （ 解析器 封装 对象 和 文件路径）
        Document build = builder.build(is);
        //设置元素起始位置 head
        Element rootElement=build.getRootElement();
        //list容器 装 解析出来的文档
        List<Person> list=new ArrayList<>();
        //干活的人 设置null
        Person person=null;
        //装元素的容器 负责递归 从 RootElement 头开始
        List<Element> children=rootElement.getChildren();
        for(Element element:children){
            person=new Person();
            String personid=element.getAttributeValue("personid");
            person.setPersonid(personid);
            //再次递归 从element 二级节点开始循环
            List<Element> children1=element.getChildren();
            for(Element e:children1){
                String tag=e.getName();
                if("name".equals(tag)){
                    person.setName(e.getText());
                }else if("address".equals(tag)){
                    person.setAddress(e.getText());
                }else if("tel".equals(tag)){
                    person.setTel(e.getText());
                }else if("fax".equals(tag)){
                    person.setFax(e.getText());
                }else if("email".equals(tag)) {
                    person.setEmail(e.getText());
                }
            }
            list.add(person);
        }
        System.out.println("结果: ");
        //打印数组
        System.out.println(Arrays.toString(list.toArray()));
        //打印对象
        list.stream().forEach(System.out::println);
    }
}
